.
{{tag> tutoriel mbr}}
----

====== Que trouve-t-on comme programme dans le mbr ======

Si vous êtes arrivés sur cette page par erreur, faites demi tour sans tarder car ici se trouve l'antre de la bête - et il ne faut pas connaitre la peur car vous allez découvrir les entrailles de votre machine. 
\\
Le mbr est le premier secteur du disque chargé en mémoire lors du démarrage d'un ordinateur. Il a pour fonction principale de rechercher une partition où se trouve un système d'exploitation à lancer.
\\
Avant tout il faudra vérifier que la table des partitions est conforme - à défaut un message d'erreur sera affiché.

===== Pré-requis =====

  * Disposer des [[:sudo|droits d'administration]]
  * Connaitre la numération hexadécimale.
  * Connaitre le langage assembleur
  * Avoir installé un assembleur/désassembleur comme le paquet nasm
 
===== Que se passe-t-il au démarrage d'un PC ? =====

Lors de la mise sous tension, différentes routines se mettent en place ; la première consiste à attendre que la tension de l'alimentation soit stabilisée puis des tests processeur, carte mère, barrettes de mémoire sont effectués. Ceci correspond à la séquence POST.
\\
Vient ensuite la recherche de périphériques de démarrage selon l'ordre de boot.
\\
Le bios charge alors le premier secteur du disque (512 octets) en mémoire vive à l'adresse 0000:7C00
\\
Ce type d'adressage correspond au mode réel de fonctionnement d'un PC, c'est un fonctionnement en mode 16 bits.
\\
Une fois le chargement terminé et sans erreur, l'exécution se poursuit à l'adresse 0000:7C00, et donc suit les instructions qui figurent dans le premier secteur du mbr

===== Comment accéder à ces informations =====

Nous avons vu comment afficher le contenu du mbr ; ici il faudra effectuer deux opérations :
\\
\\
- effectuer une copie de la partie exécutable du mbr (les 440 premiers octets) sous la forme d'un fichier
\\
- utiliser un désassembleur pour afficher les instructions sous une forme lisibles par un humain (c'est tout relatif - à moins que je ne sois pas humain) au lieu de valeurs hexadécimales (opcodes)
\\
\\
Pour la première opération, on rentrera dans un terminal
<code>sudo dd if=/dev/sda of=~/mbr_exec.bs bs=1 count=440</code>
\\
La deuxième opération transforme le fichier d'instruction hexadécimales en adresses, opcodes, instructions
\\
<code>ndisasm -b16 ~/mbr_exec.bs > ~/mbr_exec.asm</code>
\\
ndisasm est le désassembleur du paquet nasm, -b16 indique que le code doit être considéré comme de l'assembleur 16 bits.
Le résultat est écrit dans le fichier ~/mbr_exec.asm
\\
Le résultat brut pose problème car des chaines de texte ont été considérées comme des instructions et sont donc mal interprétées. Il faut alors procéder par tâtonnement pour les repérer (par exemple avec un éditeur hexa) et les exclure du traitement de désassemblage.
\\
Une autre difficulté est que certaines adresses peuvent contenir, soit du code à un moment donné, soit des données (zone tampon) lorsque que le code n'est plus utilisé.
===== Voir aussi =====
\\
 
  * **(fr)** [[http://fr.wikipedia.org/wiki/Master_boot_record]]
  * **(fr)**[[http://fr.wikipedia.org/wiki/Partition_de_disque_dur]]
  * [[http://forum.ubuntu-fr.org/viewtopic.php?id=390336]] sur le forum ubuntu-fr
  * **(fr)**[[http://fr.wikipedia.org/wiki/Logical_block_addressing]]


----
//Contributeurs principaux : [[:utilisateurs:Nasman]].//
